/**
 * Copyright (c) [2025] [AGIROS] 
 * [travoddsgen] is licensed under Mulan PSL v2. 
 * You can use this software according to the terms and conditions of the Mulan PSL v2. 
 * You may obtain a copy of Mulan PSL v2 at: 
 *          http://license.coscl.org.cn/MulanPSL2 
 * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, 
 * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, 
 * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. 
 * See the Mulan PSL v2 for more details.
 */ 

#ifndef clangtypenamevisitor_h__
#define clangtypenamevisitor_h__

#include "CppLangTypeNameVisitor.h"
#include "SyntaxCheckerVisitor.h"
#include "IDLParser.h"
#include "Ast.h"
#include <map>

class CLangTypeNameVisitor : public CppLangTypeNameVisitor {
public:
    CLangTypeNameVisitor(SyntaxCheckerVisitor& syntaxCheckerVisitor, IDLParser& parser) : CppLangTypeNameVisitor(syntaxCheckerVisitor, parser) {}
    void visit(StructForwardDclNode& node) override;
    void visit(BaseTypeNode& node) override;
    void visit(SequenceTypeNode& node) override;
    void visit(StringTypeNode& node) override;
    void visit(WideStringTypeNode& node) override;
    void visit(FixedPtTypeNode& node) override;
    void visit(MapTypeNode& node) override;
private:
    /**
     * @brief 从模块栈构建模块名前缀。
     * 
     * @return 模块名前缀。
     */
    std::string modulePrefix() override;

    /**
     * @brief 从scopedName构造出完整的名称。
     */
    virtual std::string scopedName(ScopedNameNode* node, unsigned int length);
};

#endif // clangtypenamevisitor_h__